#ifndef CONFIG_MANAGER_H
#define CONFIG_MANAGER_H

#include "common.h"
#include "database/db_manager.h"

typedef struct {
    char *config_file;
    json_t *root;
    time_t last_modified;
    pthread_rwlock_t rwlock;
    bool auto_reload;
} config_manager_t;

typedef struct {
    char *name;
    char *url;
    char *method;
    json_t *headers;
    json_t *params;
    json_t *body;
    int timeout_ms;
    int interval_ms;
    char *data_mapping; // 数据映射规则
} api_config_t;

typedef struct {
    char *name;
    char *key_pattern;
    int check_interval_ms;
    json_t *thresholds;
    char *event_name;
    bool enabled;
} monitor_config_t;

int config_manager_init(config_manager_t *config, const char *config_file, bool auto_reload);
json_t *config_manager_get(config_manager_t *config, const char *path);
int config_manager_reload(config_manager_t *config);
api_config_t *config_get_api_config(config_manager_t *config, const char *api_name);
monitor_config_t *config_get_monitor_config(config_manager_t *config, const char *monitor_name);
void config_free_api_config(api_config_t *api_config);
void config_free_monitor_config(monitor_config_t *monitor_config);
void config_manager_destroy(config_manager_t *config);

// typedef struct {
//     db_manager_t *db_mgr;         // 使用数据库存储配置
//     bool auto_reload;
//     time_t last_reload;
// } config_manager_t;

// typedef struct {
//     char *name;
//     char *url;
//     char *method;
//     json_t *headers;
//     json_t *params;
//     json_t *body;
//     int timeout_ms;
//     int interval_ms;
//     char *data_mapping;
//     bool enabled;
// } api_config_t;

// typedef struct {
//     char *name;
//     char *key_pattern;
//     int check_interval_ms;
//     json_t *thresholds;
//     char *event_name;
//     bool enabled;
// } monitor_config_t;

// // 初始化时传入数据库管理器
// int config_manager_init(config_manager_t *config, db_manager_t *db_mgr, bool auto_reload);
// json_t *config_manager_get(config_manager_t *config, const char *path);
// int config_manager_set(config_manager_t *config, const char *path, json_t *value);
// int config_manager_reload(config_manager_t *config);
// int config_manager_save(config_manager_t *config);  // 新增保存到数据库

// api_config_t *config_get_api_config(config_manager_t *config, const char *api_name);
// monitor_config_t *config_get_monitor_config(config_manager_t *config, const char *monitor_name);
// int config_save_api_config(config_manager_t *config, api_config_t *api_config);
// int config_save_monitor_config(config_manager_t *config, monitor_config_t *monitor_config);
// void config_free_api_config(api_config_t *api_config);
// void config_free_monitor_config(monitor_config_t *monitor_config);
// void config_manager_destroy(config_manager_t *config);


#endif
